package org.szy.plugin.sys.service;

import com.mybatisflex.core.query.QueryWrapper;
import org.szy.core.common.param.CommonMoveParam;
import org.szy.core.common.param.CommonStatusParam;
import org.szy.core.common.service.BaseService;
import org.szy.plugin.sys.entity.SysMenu;
import org.szy.plugin.sys.param.SysMenuQueryParam;
import org.szy.plugin.sys.pojo.SysMenuTree;

import java.util.List;

/**
 * 系统菜单Service接口
 *
 * @author wangbuhao
 * @since 2023-06-25 10:36:16
 **/
public interface SysMenuService extends BaseService<SysMenu> {

    /**
     * 获取系统菜单查询Wrapper
     *
     * @author wangbuhao
     * @since 2023-06-25 10:36:16
     */
    QueryWrapper qwByQuery(SysMenuQueryParam param);

    /**
     * 获取系统菜单列表
     *
     * @param param 查询参数
     * @return 系统菜单列表
     */
    List<SysMenu> list(SysMenuQueryParam param);


    /**
     * 添加系统菜单
     *
     * @author wangbuhao
     * @date 2023年6月25日10:40:28
     */
    boolean add(SysMenu entity);

    /**
     * 编辑系统菜单
     *
     * @author wangbuhao
     * @date 2023年6月25日10:40:28
     */
    boolean edit(SysMenu entity);

    /**
     * 删除系统菜单
     *
     * @author wangbuhao
     * @date 2023年6月25日10:40:28
     */
    boolean deleteById(Long id);

    /**
     * 构建菜单树形结构
     *
     * @param list 菜单列表
     * @return 树形结构列表
     */
    List<SysMenuTree> buildTrees(List<SysMenu> list);

    /**
     * 移动菜单位置
     *
     * @param param 移动参数
     */
    boolean move(CommonMoveParam param);

    /**
     * 移动菜单位置
     *
     * @param param 移动参数
     * @return 移动结果
     */
    boolean modifyStatus(CommonStatusParam param);

    /**
     * 菜单主键列表根据父主键
     *
     * @param pid 父主键
     * @return 菜单主键列表
     */
    List<String> listIdByPid(String pid);

    /**
     * 创建菜单权限
     *
     * @param id 菜单标识
     * @return 创建结果
     */
    boolean createPerms(Long id);


}
